package com.key.mapper;

import com.key.common.dto.AssetsAddDTO;
import com.key.common.dto.AssetsFindDTO;
import com.key.common.dto.AssetsStateDTO;
import com.key.common.vo.AssetsVO;
import com.key.entity.Assets;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author wei
 * @create 2023-02-20 9:07
 */
public interface AssetsMapper {
    /**
     * 查询资产表
     * @param assetsFindDTO
     * @return
     */
    List<AssetsVO> selectAssetsList(AssetsFindDTO assetsFindDTO);

    /**
     * 查询每个资产的所属公司
     * @param assetsIds
     * @return
     */
    List<Map<String, Object>> getAssetsAdmin(@Param("assetsIds") List<Long> assetsIds);

    /**
     * 查询每个资产的管理员
     * @param assetsIds
     * @return
     */
    List<Map<String, Object>> getAssetsManager(@Param("assetsIds") List<Long> assetsIds);

    /**
     * 查询每个资产的创建者
     * @param assetsIds
     * @return
     */
    List<Map<String, Object>> getAssetsCreater(@Param("assetsIds") List<Long> assetsIds);

    /**
     *  tc
     * 依据分类和状态查询可领用或借用的资产
     */
    List<Assets> selectAssetsListByAssetClassAndAssetsState(@Param("assetTypeName") String assetTypeName);

    /**
     * tc
     * 查询领用单号下的资产
     */
    List<Assets> selectAssetsByReceiptAssets(@Param("receiptNumber")String receiptNumber );
    /**
     * 查询领用单号下的资产
     * tc
     */
    List<Assets> selectAssetsByBorrowAssets(@Param("borrowNumber")String borrowNumber );

    /**
     * 根据资产id删除资产
     * @param assetsIds
     * @return
     */
    int deleteAssets(@Param("assetsIds") List<Long> assetsIds);

    /**
     * 修改资产，不能批量修改
     * @param assets
     * @return
     */
    int updateAssets(Assets assets);

    /**
     * 依据资产编码修改资产，不能批量修改
     * @param assets
     * @return
     */
    int updateAssetsByAssetsCode(Assets assets);

    /**
     * 增加资产，不能批量增加
     * @param assets
     * @return
     */
    int addAssets(Assets assets);

    /**
     * 复制资产
     * @param assetsId
     * @return
     */
    int copyAssets(@Param("assetsId") Long assetsId);

    /**
     * 获取资产总数
     * @return
     */
    Integer getAssetsCount(AssetsFindDTO assetsFindDTO);

    /**
     * 获取指定所属公司的资产总数
     * @param assetsAdmin
     * @return
     */
    Integer getAssetsAdminCount(@Param("assetsAdmin") String assetsAdmin);

    /**
     * 获取制定管理员的资产总数
     * @param assetsManager
     * @return
     */
    Integer getAssetsManagerCount(@Param("assetsManager") String assetsManager);

    /**
     * 获取资产金额总数
     * @param assetsFindDTO
     * @return
     */
    Integer getSumMoney(AssetsFindDTO assetsFindDTO);

    /**
     * 获取指定所属公司的资产金额总数
     * @param assetsAdmin
     * @return
     */
    Integer getAssetsAdminSumMoney(@Param("assetsAdmin") String assetsAdmin);

    /**
     * 获取制定管理员的资产金额总数
     * @param assetsManager
     * @return
     */
    Integer getAssetsManagerSumMoney(@Param("assetsManager") String assetsManager);

    /**
     * 根据资产id查询资产状态
     * @param assetsId
     * @return
     */
    List<Integer> findAssetsStateByAssetsId(@Param("assetsId") List<Long> assetsId);

    Long selectAssetsId(Assets assets);
    int findAssetsState(Integer state);

    int findAssetsTypeUse(Map map);

    int findAssetsTypeUseById(Map map);
}
